/**
 * 家人信息模型
 */

// 关系类型枚举
const RELATIONSHIP_TYPES = [
  '父亲', '母亲', '儿子', '女儿', '丈夫', '妻子', 
  '祖父', '祖母', '外祖父', '外祖母', '孙子', '孙女',
  '外孙', '外孙女', '兄弟', '姐妹', '叔叔', '阿姨',
  '舅舅', '姑姑', '姨妈', '侄子', '侄女', '外甥',
  '外甥女', '堂兄弟', '堂姐妹', '表兄弟', '表姐妹', '其他'
];

/**
 * 验证家人信息数据
 * @param {Object} data - 家人信息数据
 * @returns {Object} 验证结果
 */
exports.validate = (data) => {
  const errors = [];
  
  // 验证姓名
  if (!data.name) {
    errors.push('姓名不能为空');
  } else if (data.name.length > 50) {
    errors.push('姓名长度不能超过50个字符');
  }
  
  // 验证关系
  if (!data.relationship) {
    errors.push('关系不能为空');
  } else if (!RELATIONSHIP_TYPES.includes(data.relationship) && data.relationship !== '其他') {
    errors.push(`无效的关系类型: ${data.relationship}`);
  }
  
  // 验证生日（如果有）
  if (data.birthday) {
    const birthdayDate = new Date(data.birthday);
    if (isNaN(birthdayDate.getTime())) {
      errors.push('生日格式无效，应为有效的日期格式');
    }
  }
  
  // 验证电话号码（如果有）
  if (data.phone && !/^[0-9+\-\s]{5,20}$/.test(data.phone)) {
    errors.push('电话号码格式无效');
  }
  
  // 验证邮箱（如果有）
  if (data.email && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(data.email)) {
    errors.push('邮箱格式无效');
  }
  
  return {
    isValid: errors.length === 0,
    errors
  };
};

/**
 * 创建家人信息对象
 * @param {Object} data - 家人信息数据
 * @returns {Object} 家人信息对象
 */
exports.create = (data) => {
  return {
    id: data.id || null,
    name: data.name,
    relationship: data.relationship,
    birthday: data.birthday || null,
    phone: data.phone || null,
    email: data.email || null,
    address: data.address || null,
    notes: data.notes || null,
    avatar: data.avatar || null,
    createdAt: data.createdAt || new Date().toISOString(),
    updatedAt: data.updatedAt || new Date().toISOString()
  };
};

/**
 * 获取关系类型列表
 * @returns {Array} 关系类型列表
 */
exports.getRelationshipTypes = () => {
  return [...RELATIONSHIP_TYPES];
};